import axios, { type AxiosInstance } from 'axios'
import EventBus from './EventBus'

let service: AxiosInstance

const isDev = import.meta.env.MODE === 'development'

console.log('---------------------------------------------');
console.log('isDev:', isDev);


// Base64解码函数
function decodeBase64(str: string): string {
    try {
        return atob(str)
    } catch (error) {
        console.error('Base64解码失败:', error)
        return str // 如果解码失败，返回原始字符串
    }
}

async function initService() {
    try {
        const configResponse = isDev ? await axios.get('/config.json') : await axios.get('/ai_closet/config.json')
        console.log('configResponse:', configResponse.data);
        const { dev, pro } = configResponse.data
        const config = isDev ? dev : pro
        const baseURL = decodeBase64(config.apiUrl)

        // 根据环境创建不同的 axios 实例
        service = axios.create({
            baseURL,
            timeout: 120000
        })

        // 添加请求拦截器
        service.interceptors.request.use(
            config => {
                const LoginObj = JSON.parse(sessionStorage.getItem('Login')!)
                const { token } = LoginObj
                if (token) {
                    config.headers!.token = token
                } else if (!location.href.includes('Login')) {
                    EventBus.emit('HandleError', '登录失效，请重新登录')
                    EventBus.emit('PageChange', 'Login')
                }
                return config
            },
            err => {
                return Promise.reject(err)
            }
        )

        // 添加响应拦截器
        service.interceptors.response.use(
            success,
            failed
        )

        return service
    } catch (error) {
        console.error('配置文件加载失败，使用默认配置')
        // 使用默认配置
        service = axios.create({
            baseURL: import.meta.env.VITE_APP_BASEURL,
            timeout: 120000
        })

        // 添加拦截器
        service.interceptors.request.use(
            config => {
                const LoginObj = JSON.parse(sessionStorage.getItem('Login')!)
                const { token } = LoginObj
                if (token) {
                    config.headers!.token = token
                } else if (!location.href.includes('Login')) {
                    EventBus.emit('HandleError', '登录失效，请重新登录')
                    EventBus.emit('PageChange', 'Login')
                }
                return config
            },
            err => {
                return Promise.reject(err)
            }
        )
        service.interceptors.response.use(success, failed)
        return service
    }
}




// service = axios.create({
//     baseURL: import.meta.env.VITE_APP_BASEURL,
//     timeout: 120000
// })

// // 添加请求拦截器
// service.interceptors.request.use(
//     config => {
//         const LoginObj = JSON.parse(sessionStorage.getItem('Login')!)
//         const { token } = LoginObj
//         if (token) {
//             config.headers!.token = token
//         } else if (!location.href.includes('Login')) {
//             EventBus.emit('HandleError', '登录失效，请重新登录')
//             EventBus.emit('PageChange', 'Login')
//         }
//         return config
//     },
//     err => {
//         return Promise.reject(err)
//     }
// )

// // 添加响应拦截器
// service.interceptors.response.use(
//     success,
//     failed
// )




function success(res: any) {
    const { status, data: { code, msg } } = res;
    if (status && !code) {
        return res.data;
    } else if (status == 200 && code == 200) {
        return res.data.data;
    } else {
        EventBus.emit('CodeError', code, msg)
        // useDebounceFn(() => EventBus.emit('CodeError', code, msg), 200)()
        return Promise.reject('Error')
    }
}

function failed(err: any) {
    EventBus.emit('ServerError')
    // HandleError('ServerError')
    // useDebounceFn(() => EventBus.emit('ServerError'), 200)()
    return Promise.reject(err); // 返回接口返回的错误信息
}


// function success(res: any) {
//     // console.log(res);

//     const { status, data: { code, msg } } = res;

//     if (status && !code) {
//         return res.data;
//     }
//     else
//         if (code === 200) {

//             return res.data.data;
//         }
//         else {
//             EventBus.emit('CodeError', code, msg)
//             return res
//         }

//     // if (code === 0 || code === 200) {
//     //     return res.data.data;
//     // } else if (code == 400) {
//     //     EventBus.emit('CodeError', 400, res.data.msg)
//     // } else if (code === 401) {
//     //     EventBus.emit('CodeError', 401)
//     // } else if (code === 403) {
//     //     EventBus.emit('CodeError', 403)
//     // } else if (code === -1) {
//     //     EventBus.emit('CodeError', -1)
//     // }
//     // return res;
// }

// function failed(err: any) {
//     EventBus.emit('ServerError')
//     return Promise.reject(err); // 返回接口返回的错误信息
// }

// service.interceptors.response.use(success, failed)

// export default service

export { initService }